#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Indexes;
using Cephei.QL.Times;
using Cephei.QL.Termstructures.Volatility;
namespace Cephei.QL.Experimental.Volatility
{
     // <summary> 
	// ! This abstract class defines the interface of concrete Interest rate volatility (smile) surfaces which will be derived from this one.  Volatilities are assumed to be expressed on an annual basis.
	// </summary>
    [Guid ("A03371EF-8F00-437e-AC50-3D0BD674BABD"),ComVisible(true)]
	public interface IInterestRateVolSurface : Cephei.QL.Experimental.Volatility.IBlackVolSurface
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Cephei.QL.Indexes.IInterestRateIndex Index {get;}
        
		 DateTime OptionDateFromTenor(Cephei.QL.Times.IPeriod p);
    }

    // <summary> 
	// ! This abstract class defines the interface of concrete Interest rate volatility (smile) surfaces which will be derived from this one.  Volatilities are assumed to be expressed on an annual basis. Factory
	// </summary>
   	[ComVisible(true)]
    public interface IInterestRateVolSurface_Factory // : Collection_Factory<IInterestRateVolSurface, ICell<IInterestRateVolSurface>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary>
        /// Create a hybrid Vector of IInterestRateVolSurface, with event notification of changes
        /// </summary>
        /// <returns>a new Vector&ltIInterestRateVolSurface&gt</returns>
        IVector<IInterestRateVolSurface> CreateVector();
        /// <summary>
        /// Create a hybrid Vector of ICell of IInterestRateVolSurface, with event notification of changes
        /// </summary>
        /// <returns>a new ICell&ltIVector&ltI&ltIInterestRateVolSurface&gt&gt&gt</returns>
        Generic.ICell<IVector<Generic.ICell<IInterestRateVolSurface>>> CreateCellVector();
        IVector<IInterestRateVolSurface> CreateVector(IEnumerable<IInterestRateVolSurface> source);
        Generic.ICell<IVector<Generic.ICell<IInterestRateVolSurface>>> CreateCellVector(IEnumerable<Generic.ICell<IInterestRateVolSurface>> source);
    }
}

